'use client';

import i18n from "i18next";
import LanguageDetector from "i18next-browser-languagedetector";
import { initReactI18next, useTranslation } from "react-i18next";

export type i18nText =
    | { text: string }
    | { key: string, values?: Record<string, string> }

export function I18nText({ i18nText, className }: { i18nText: i18nText, className?: string }) {
    const { t } = useTranslation();
    return <span className={className}>{('key' in i18nText ? t(i18nText.key, i18nText.values) : i18nText.text)}</span>
}

i18n
    .use(LanguageDetector)
    .use(initReactI18next)
    .init({
        fallbackLng: "en",
        interpolation: { escapeValue: false },
        resources: {
            en: {
                translation: {
                    'About': 'About',
                    'New Chat': 'New Chat',
                    'Settings': 'Settings',
                    'General': 'General',
                    'Chat': 'Chat',
                    'Speech': 'Speech',
                    'Models': 'Models',
                    'Model-Single-Form': 'Model',
                    'Select Your Language': 'Interface Language',
                    'Confirm': 'Confirm',
                    'Untitled Chat': 'Untitled Chat',
                    'Chat {{number}}': 'Chat {{number}}',
                    'translateInputInto': 'Translate your input into',
                    'save': 'Save',
                    'instruction': 'Instruction',
                    'tooltip': 'Tooltip',
                    'tooltipInfo': 'The tooltip is the text that will be shown when you hover over the icon, like what you see here.',
                    'icon': 'Icon',
                    'singleCharacterIcon': 'Please use a single character as icon',
                    'editInstruction': 'Edit Instruction',
                    'customInstruction': 'Custom Instruction',
                    'instructionType': 'Instruction Type',
                    'generation': 'Generation',
                    'modification': 'Modification',
                    'cancel': 'Cancel',
                    'add': 'Add',
                    'enterOneCharacter': 'Only one character is supported',
                    'customIconNote': 'Custom icon feature will be available in the future. For now, please use a single character as icon.',
                    'generationExplanation': 'A generation instruction tells the AI to generate a response for you. It can only work when your input is empty.\nTry to keep the instruction concise and specific, telling the AI what the response should be like.',
                    'modificationExplanation': 'A modification instruction tells the AI to modify your current input. It works when your input is not empty.\nYou can use it to correct grammar mistakes, polish your expression, or translate your input into another language.',
                    'typeMessage': 'Type your message here...',
                    'sendTips': 'Press Enter to send, Ctrl+Enter to add the message, Shift+Enter to add a new line',
                    'recordingTips': 'Press Space to start recording, release to stop',
                    'system': 'system',
                    'assistant': 'assistant',
                    'user': 'user',
                    'Auto Send': 'Auto Send',
                    'Voice Mode': 'Voice Input',
                    'Rename': 'Rename',
                    'Delete': 'Delete',
                    'Free Trial': 'Quick Trial',
                    'Models Service': 'Models Service',
                    'baseURL': 'Base URL',
                    'Chat Model': 'Chat Model Service',
                    'Add Service': 'Add Service',
                    'Speech Synthesis Service': 'Speech Synthesis Service',
                    'translateTooltip': 'Ask AI to translate your input into {{targetLanguage}}',
                    'generateResponseTooltip': 'Ask AI to help generate a response',
                    'grammarCheckTooltip': 'Ask AI to help correct potential grammar issues',
                    'The recommended response is as follows': 'The recommended response is as follows',
                    'If you have any more questions or requests, feel free to reach out to me': 'If you have any more questions or requests, feel free to reach out to me',
                    'chat.backToPreviousLevel': 'Back to previous conversation',
                    'addCustomInstruction': 'Add your custom instruction',
                    'Auto Play Audio': 'Auto Play Speech',
                    'Shortcut Instructions': 'Shortcut Instructions',
                    'cannotDeleteBuiltInInstruction': 'Cannot delete built-in instruction',
                    'deleteInstruction': 'Delete instruction',
                    'toggleInstructionDisplay': 'Toggle instruction display',
                    'Select Practice Language': 'Language You Want to Practice',
                    'lang.en': 'English',
                    'lang.zh': 'Chinese',
                    'lang.ja': 'Japanese',
                    'practiceLanguageHint': 'This will set the default language for some shortcut instructions, which can be changed later in instruction settings',
                    'betaWarning': 'This application is currently in beta testing. Please do not store any important data in it.',
                    'Approve': 'Approve',
                    'Reject': 'Reject',
                    'Follow-up discussions': 'Follow-up discussions',
                    'Show Diff': 'Show Diff',
                    'Edit': 'Edit',
                    'Save': 'Save',
                    'Please turn off diff view to edit': 'Turn off diff view to edit',
                    'voiceModeTips': `Press the backspace key to clear the current input, press the I key to exit voice input mode`,
                    'autoSendTips': 'When enabled, the message will be sent automatically after voice recording ends',
                    'recordingButtonTips': 'Click to start recording, click again to stop',
                    'Welcome to LinguaDuck': 'Welcome to LinguaDuck',
                    'Please set up your preferences to get started': 'Please set up your preferences to get started',
                    'Custom Service': 'Custom Service',
                    'Speech Language': 'Speech Language',
                    'Speech Voice': 'Speech Voice',
                    'Test Speech': 'Test Speech',
                    'Default': 'Default',
                    'Enter text to test speech': 'Enter text to test speech',
                    'What is the answer to life, the universe and everything?': 'What is the answer to life, the universe and everything?',
                    'speechVoiceTestTip': 'Voice quality may vary across browsers and devices. Try different voices and texts to find the best one for you.',
                    'Azure Region': 'Azure Region',
                    'Subscription Key': 'Subscription Key',
                    'Language': 'Language',
                    'Voice': 'Voice',
                    'Enter your Azure subscription key': 'Enter your Azure subscription key',
                    'freeTrial.ttsServiceTip': 'This TTS service is for quick trial only, with limited speed and quota. For better experience, please consider using other speech synthesis services.',
                    'speechSvc.webSpeech': 'Browser Built-in TTS',
                    'speechSvc.azure': 'Azure TTS',
                    'speechSvc.freeTrial': 'Quick Trial',
                    'Quack!': 'Quack!',
                    'freeTrialHintMessage': 'The current chat model service is for quick trial only, with limited speed and usage frequency. Go to Settings -> "Chat -> Chat Model Service" to switch to other model services.',
                    'welcomeMessage': 'LinguaDuck is an AI-powered conversation practice application for language learners of all proficiency levels',
                    'Please enter the complete URL including the path': 'Please enter the complete URL including the path',
                    'freeTrialChatIntelligenceIntroduction': 'This service is for quick trial only, with limited speed and usage frequency. Model selection is not supported. Please switch to other model services if needed.',
                    'babelDuckChatIntelligenceIntroduction': 'Based on advanced avian neural biomimetic architecture, this revolutionary waterfowl intelligence system employs unique duck cognitive patterns, featuring advanced multilingual processing capabilities with millisecond-level response times.',
                    'Blur Text': 'Blur Text',
                    'useGlobalSettings': 'Use Global Chat Settings',
                    'globalSettingsDescription.enabled': 'Current chat settings will be synchronized with global settings. Changes made here will affect all chats using global settings.',
                    'globalSettingsDescription.disabled': 'Global settings are disabled. Changes made here will only affect the current chat.',
                    'logoAttribution': 'Duck icons designed by Freepik - Flaticon',
                    'viewOnGitHub': 'View on GitHub',
                    'interfaceLanguageHint': 'Recommended to match your native language',
                    'Next Step': 'Next Step',
                    'Tutorial': 'Tutorial',
                    'Tutorial Model': 'Tutorial Model',
                    'Press Enter to send your message': 'Press Enter to send your message (If Enter key does not work, click the text box and press Enter again)',
                    'Free input is temporarily not supported in this tutorial': 'Free input is temporarily not supported in this tutorial',
                    'Expand': 'Expand',
                    'Collapse': 'Collapse',
                    'voiceModeNotSupportedInTutorial': 'Voice input is temporarily not supported in tutorial mode',
                    'recordingNotSupportedInTutorial': 'Voice input is temporarily not supported in tutorial mode',
                    'trialChatUnavailable': 'The trial chat service is temporarily unavailable, possibly due to high traffic. Please try again later or switch to another chat model service in settings',
                    'chatUnavailable': 'Chat model service is temporarily unavailable, please try again later',
                    'modelSettingsInvalid': 'Invalid model settings: {{message}}',
                    'trialTTSUnavailable': 'The trial TTS service is temporarily unavailable. Please try again later or switch to another speech synthesis service in settings',
                    'IELTS Speaking Practice': 'IELTS Speaking Practice',
                    'Mock Interview': 'Mock Interview',
                    'fillPositionAndResumeHint': 'Before you start, remember to modify the position and resume.',
                    'transcriptionImprovementTooltip': 'Ask AI to improve speech recognition results',
                    // tutorials
                    '东西有点多，我晚点提炼一下': '东西有点多，我晚点提炼一下 (That\'s a lot of information, I\'ll summarize it later)',
                    '这里可以用 extract 吗?': 'Can I use extract here?',
                    'extract 虽然也有"提取"的意思，但在这个会议场景下不是最佳选择。让我解释一下原因：\n……（略）': 'Although extract also means "extract", it is not the best choice in this meeting scenario. Let me explain why:\n……(omitted)',
                    '就像上面这样，并且在子对话中的讨论不会影响上一层对话。\n\n现在我们要结束子对话，点击下左侧的 ">" 按钮，即可返回上一层对话。': 'As shown above, and discussions in sub-chats will not affect the upper-level chat. \n\nNow we want to end the sub-chat. Click the ">" button on the left to return to the upper-level chat.',
                    "LinguaDuck 是一款面向各水平层次语言学习者的 AI 口语对话练习应用。除了普通的 AI 对话聊天能力外，我们还提供了一系列为口语练习场景而设计的工具，本教程将为你简单介绍如何使用它们。若你更倾向于自行摸索，可以点击左下角「新建对话」，即可开始体验，之后你依然随时可以回来继续该教程。": "LinguaDuck is an AI conversation practice application designed for language learners of all proficiency levels. In addition to regular AI chat capabilities, we provide a suite of tools specifically designed for speaking practice scenarios. This tutorial will briefly introduce you to how to use them. If you prefer to explore on your own, you can click 'New Chat' in the bottom left corner to start experiencing it, and you can always come back to continue this tutorial later.",
                    "LinguaDuck 提供了一系列快捷指令，协助用户在口语表达上遇到困难时更流畅地推进对话。\n比如有些人练习初期很容易遇到\"卡壳\"的情况，完全不知道某句话该如何表达时，不得不切出去寻求其他工具的帮助。为此系统内置了一个快捷指令，作为初期过渡工具用，允许你先用母语表达一遍，然后帮你转换为对应语言。\n\n接下来我们简单演示下使用方法": "LinguaDuck provides a series of shortcut commands to help users maintain conversation flow when they encounter difficulties in oral expression.\nFor example, some people in the early stages of practice often get 'stuck', not knowing how to express certain phrases and having to switch to other tools for help. For this purpose, the system has a built-in shortcut command as a transitional tool, allowing you to express yourself in your native language first, then helping you convert it to the target language.\n\nLet's demonstrate how to use it",
                    "在子对话中，你可以在当前对话的基础上，向 AI 追问更多问题。": "In sub-conversations, you can ask AI follow-up questions based on the current conversation.",
                    "以上便是 LinguaDuck 中其中一个快捷指令的基本使用流程，除此之外，我们还提供了其他一系列快捷指令。": "Above is the basic usage process of one of LinguaDuck's shortcut commands. Besides this, we provide several other shortcut commands.",
                    "比如常见的语法纠正需求，也有对应的内置指令，效果如下：\n": "For example, there are built-in commands for common grammar correction needs. Here's how it works:\n",
                    "\n除此之外，除了内置的快捷指令，你还可以根据自身需求自定义指令。": "\nIn addition to the built-in shortcut commands, you can also customize commands according to your needs.",
                    "比如说你的口语水平已经达到了一定的流畅度，只是偶尔有些词汇的表达方式不够地道，那么你可以自定义一个快捷指令：\n": "For instance, if your speaking ability has reached a certain level of fluency, but occasionally some expressions aren't quite idiomatic, you can customize a shortcut command:\n",
                    "\n鉴于自定义指令的使用流程与内置指令类似，我们就不再详细演示整个流程了。": "\nSince the process of using custom commands is similar to built-in commands, we won't demonstrate the entire process in detail.",
                    "假设你正在练习线上会议中的常用表达，这时 AI 问了你一个问题：": "Let's say you're practicing common expressions used in online meetings, and the AI asks you a question:",
                    "What do you think about these suggestions?": "What do you think about these suggestions?",
                    "假设你想回复 \"东西有点多，我晚点提炼一下\"，但不知道如何表达，那么就可以通过快捷指令求助另一个 AI\n": "Suppose you want to reply \"东西有点多，我晚点提炼一下\" (There's a lot of information, I'll summarize it later), but don't know how to express it. You can use the shortcut command to ask another AI for help\n",
                    "现在点一下这个图标试试": "Now try clicking this icon",
                    "tutorialEndingSummary": `With custom shortcut commands, you can build your own toolchain according to your needs:\n\n- For example, having AI assist with answering difficult questions during mock interviews, without needing to switch to other windows to look up information;\n- Or having AI extract phrases from sentences and provide synonyms to expand your vocabulary;\n- In future updates, you'll even be able to integrate with external systems through shortcut commands, such as automatically adding words to your vocabulary list, and more.\n\nWith this, we've completed the basic introduction to shortcut commands. To simplify the tutorial, we've omitted introducing features like voice input, message editing, and chat configuration. You can now try creating a regular chat to experience these features.\n\nThis concludes the tutorial. We hope you found it helpful and look forward to your feedback!`,
                    'tooltip.diffViewText': 'The popup shows the AI\'s translation result. Unlike regular web translation tools, shortcut commands consider the conversation context to provide more contextually appropriate suggestions.',
                    'tooltip.diffViewText2': 'For example, in this meeting scenario, you don\'t need to worry about AI misinterpreting your words as chemical extraction - it understands the meeting context.',
                    'tooltip.approveButton': 'Now, click the "Approve" button to accept the AI\'s suggestion.',
                    'tooltip.approveRejectButtons': 'If you\'re satisfied with the result, click "Approve" or press Enter to insert it into the input box.',
                    'tooltip.approveRejectButtons2': 'If not, click "Reject" or press Backspace to cancel this modification. (Currently disabled in tutorial mode)',
                    'tooltip.followUpDiscussion': 'If you\'re not satisfied with AI\'s response or have other questions, you can ask follow-up questions or discuss further. Click now to see how it works.',
                    'webSpeech.serviceTip': 'This service uses your browser\'s built-in text-to-speech engine which runs locally. Available languages and voice quality may vary depending on your browser and operating system.',
                    'azureTTS.serviceTip': 'This service requires an Azure subscription key. You\'ll need to register for an Azure account and create a Speech Service resource to get the key. Azure TTS provides high-quality voices in many languages and supports neural text-to-speech.',
                    'autoPlayAudioDescription': 'Automatically play speech after AI responds to your message',
                    'systemPrompt': 'You are a friendly conversation partner. Please respond in the same language as the user. Keep your responses short and natural, under 50 words. Use casual, conversational language. Avoid formal language and complex sentences. Express one point at a time. Do not use formatted text (like bold or italic) or emojis to ensure better text-to-speech results.',
                    'systemPromptHint': 'This is the character setting given to AI by the system. You can modify it according to your needs.'
                }
            },
            zh: {
                translation: {
                    'About': '关于',
                    'New Chat': '新建对话',
                    'Settings': '设置',
                    'General': '通用',
                    'Chat': '对话',
                    'Speech': '语音',
                    'Models': '模型',
                    'Model-Single-Form': '模型',
                    'Select Your Language': '界面语言',
                    'Confirm': '确认',
                    'Untitled Chat': '未命名对话',
                    'Chat {{number}}': '对话 {{number}}',
                    'translateInputInto': '将当前输入翻译为',
                    'save': '保存',
                    'instruction': '指令',
                    'tooltip': '提示文本',
                    'tooltipInfo': '鼠标悬停在图标上时显示的文案，就像现在这样的效果',
                    'icon': '图标',
                    'singleCharacterIcon': '请使用一个字符作为图标',
                    'editInstruction': '编辑指令',
                    'customInstruction': '自定义指令',
                    'instructionType': '指令类型',
                    'generation': '生成',
                    'modification': '修改',
                    'cancel': '取消',
                    'add': '添加',
                    'enterOneCharacter': '仅支持输入一个字符',
                    'customIconNote': '自定义图标功能后续会推出，目前仅支持使用一个字符作为图标',
                    'generationExplanation': '生成指令可以让 AI 帮你生成回复内容，例如帮你回答你答不上来的问题。该指令类型只有输入为空时才能触发。\n尽量把指令写得简洁和具体一些，指示 AI 生成你想要的回复内容。',
                    'modificationExplanation': '修改指令可以让 AI 帮你修改当前的输入内容，只有输入内容不为空时才能触发。\n可以用它来纠正语法错误、润色表达方式，或将你的输入翻译成另一种语言。',
                    'typeMessage': '在这里输入消息内容...',
                    'sendTips': '按 Enter 发送，Ctrl+Enter 添加消息但不触发回复，Shift+Enter 换行',
                    'recordingTips': '按空格开始录音，松开则停止录音',
                    'system': '系统',
                    'assistant': '助手',
                    'user': '用户',
                    'Auto Send': '自动发送',
                    'Voice Mode': '语音输入',
                    'Rename': '重命名',
                    'Delete': '删除',
                    'Free Trial': '快速体验',
                    'Models Service': '模型服务',
                    'baseURL': '基础 URL',
                    'Chat Model': '对话模型服务',
                    'Add Service': '添加服务',
                    'Speech Synthesis Service': '文本转语音服务',
                    'translateTooltip': '让 AI 将输入框中的消息翻译为 {{targetLanguage}}',
                    'generateResponseTooltip': '让 AI 帮忙回复当前消息（建议在需要回答问题时使用）',
                    'grammarCheckTooltip': '让 AI 检查并修复潜在的语法问题',
                    'The recommended response is as follows': '根据你的要求调整后的消息如下',
                    'If you have any more questions or requests, feel free to reach out to me': '如果你还有什么疑问或要求，欢迎进一步讨论',
                    'chat.backToPreviousLevel': '返回上一层对话',
                    'addCustomInstruction': '添加自定义指令',
                    'Auto Play Audio': '自动播放语音',
                    'Shortcut Instructions': '快捷指令',
                    'cannotDeleteBuiltInInstruction': '内置指令不可删除',
                    'deleteInstruction': '删除指令',
                    'toggleInstructionDisplay': '切换指令显示',
                    'Select Practice Language': '你想要练习的语言',
                    'lang.en': '英语',
                    'lang.zh': '中文',
                    'lang.ja': '日语',
                    'practiceLanguageHint': '会根据该选项设置一些快捷指令的默认语言，之后可在指令设置中更改',
                    'betaWarning': '该应用目前尚处于 beta 测试阶段，开发过程中可能会重置数据，请勿将重要数据保存于应用中',
                    'Approve': '采纳',
                    'Reject': '取消',
                    'Follow-up discussions': '追问｜讨论',
                    'Show Diff': '显示差异',
                    'Edit': '编辑',
                    'Save': '保存',
                    'Please turn off diff view to edit': '仅允许在差异视图关闭时进行编辑',
                    'voiceModeTips': `按退格键清空当前输入，按 I 键退出语音模式`,
                    'autoSendTips': '开启后，语音录制结束时会自动发送消息',
                    'recordingButtonTips': '点击开始录音，再次点击停止录音',
                    'Welcome to LinguaDuck': '欢迎使用 LinguaDuck',
                    'Please set up your preferences to get started': '完成以下偏好设置，即刻开始体验',
                    'Custom Service': '自定义服务',
                    'Speech Language': '语音语言',
                    'Speech Voice': '语音声音',
                    'Test Speech': '测试语音',
                    'Default': '默认',
                    'Enter text to test speech': '输入文本测试语音',
                    'What is the answer to life, the universe and everything?': 'What is the answer to life, the universe and everything?',
                    'speechVoiceTestTip': '语音效果可能因浏览器和设备而异，建议尝试不同的声音和文本，找到最适合的组合',
                    'Azure Region': 'Azure 区域',
                    'Subscription Key': '订阅密钥',
                    'Language': '语言',
                    'Voice': '声音',
                    'Enter your Azure subscription key': '请输入 Azure 订阅密钥',
                    'freeTrial.ttsServiceTip': '仅供新用户快速体验，速度与使用频率都有限制，如需更好的体验，可切换其他文本转语音服务。',
                    'speechSvc.webSpeech': '浏览器内置 TTS',
                    'speechSvc.azure': 'Azure TTS',
                    'speechSvc.freeTrial': '快速体验',
                    'Quack!': '嘎！',
                    'freeTrialHintMessage': '当前使用的对话模型服务仅用于快速体验功能，速度和使用频率有一定限制，前往设置页面「对话 -> 对话模型服务」可切换其他模型服务。',
                    'welcomeMessage': 'LinguaDuck 是一款面向各水平层次语言学习者的 AI 口语对话练习应用',
                    'Please enter the complete URL including the path': '请输入完整的URL（包含路径）',
                    'freeTrialChatIntelligenceIntroduction': '仅供新用户快速体验产品功能用，速度和使用频率有一定限制，不支持指定模型，若有需求，可切换为其他模型服务。',
                    'babelDuckChatIntelligenceIntroduction': '基于先进的禽类神经仿生学架构，这套革命性的水禽智能系统采用独特的鸭子认知模式，具备先进的多语言处理能力，可实现毫秒级响应速度。',
                    'Blur Text': '模糊文本',
                    'useGlobalSettings': '使用全局对话设置',
                    'globalSettingsDescription.enabled': '当前对话的设置将与全局设置保持一致，对当前设置的修改会同步到全局对话设置中，其他使用全局设置的对话也会应用这些修改',
                    'globalSettingsDescription.disabled': '已取消使用全局设置，对相关设置的修改仅对当前对话生效',
                    'logoAttribution': 'Duck 图标由 Freepik - Flaticon 设计',
                    'viewOnGitHub': '在 GitHub 上查看',
                    'interfaceLanguageHint': '建议与母语保持一致',
                    'Next Step': '下一步',
                    'Tutorial': '教程',
                    'Tutorial Model': '教学模型',
                    'Press Enter to send your message': '按回车键发送消息（如果按回车键没反应，鼠标点一下文本框后再按一次回车）',
                    'Free input is temporarily not supported in this tutorial': '教程模式暂不支持自由输入',
                    'Expand': '展开',
                    'Collapse': '折叠',
                    'voiceModeNotSupportedInTutorial': '教程模式暂不支持语音输入',
                    'recordingNotSupportedInTutorial': '教程模式暂不支持语音输入',
                    'trialChatUnavailable': '体验版模型服务暂不可用，可能是当前使用人数过多，请稍后重试或在设置中切换其他聊天模型服务',
                    'chatUnavailable': '聊天模型服务暂时不可用，请稍后重试',
                    'modelSettingsInvalid': '模型设置无效：{{message}}',
                    'trialTTSUnavailable': '体验版语音服务暂不可用，请稍后重试，或在前往「设置 -> 语音」中切换至其他服务',
                    'IELTS Speaking Practice': '雅思口语练习',
                    'Mock Interview': '模拟面试',
                    'fillPositionAndResumeHint': '开始模拟面试前记得修改应聘职位和简历信息。',
                    'transcriptionImprovementTooltip': '让 AI 根据上下文推断并改善语音识别中的错误',
                    // tutorials
                    '东西有点多，我晚点提炼一下': '东西有点多，我晚点提炼一下 (That\'s a lot of information, I\'ll summarize it later)',
                    '这里可以用 extract 吗?': '这里可以用 extract 吗?',
                    'extract 虽然也有"提取"的意思，但在这个会议场景下不是最佳选择。让我解释一下原因：\n……（略）': 'extract 虽然也有"提取"的意思，但在这个会议场景下不是最佳选择。让我解释一下原因：\n……（略）',
                    '就像上面这样，并且在子对话中的讨论不会影响上一层对话。\n\n现在我们要结束子对话，点击下左侧的 ">" 按钮，即可返回上一层对话。': '就像上面这样，并且在子对话中的讨论不会影响上一层对话。\n\n现在我们要结束子对话，点击下左侧的 ">" 按钮，即可返回上一层对话。',
                    "LinguaDuck 是一款面向各水平层次语言学习者的 AI 口语对话练习应用。除了普通的 AI 对话聊天能力外，我们还提供了一系列为口语练习场景而设计的工具，本教程将为你简单介绍如何使用它们。若你更倾向于自行摸索，可以点击左下角「新建对话」，即可开始体验，之后你依然随时可以回来继续该教程。": "LinguaDuck 是一款 AI 口语对话练习应用，在这个基础上我们还提供了一系列口语练习辅助工具，本教程将为你简单介绍如何使用它们。\n或者你也可以直接点击左下角「新建对话」，直接开始体验。",
                    "LinguaDuck 提供了一系列快捷指令，协助用户在口语表达上遇到困难时更流畅地推进对话。\n比如有些人练习初期很容易遇到\"卡壳\"的情况，完全不知道某句话该如何表达时，不得不切出去寻求其他工具的帮助。为此系统内置了一个快捷指令，作为初期过渡工具用，允许你先用母语表达一遍，然后帮你转换为对应语言。\n\n接下来我们简单演示下使用方法": "LinguaDuck 提供了一系列快捷指令，协助用户在口语表达上遇到困难时更流畅地推进对话。\n\n接下来我们简单演示下使用方法。",
                    "在子对话中，你可以在当前对话的基础上，向 AI 追问更多问题。": "在子对话中，你可以在当前对话的基础上，向 AI 追问更多问题。",
                    "以上便是 LinguaDuck 中其中一个快捷指令的基本使用流程，除此之外，我们还提供了其他一系列快捷指令。": "以上便是快捷指令的基本使用流程，除了翻译指令，我们还提供了其他一系列快捷指令。",
                    "比如常见的语法纠正需求，也有对应的内置指令，效果如下：\n": "比如常见的语法纠正需求，也有对应的内置指令，效果如下：\n",
                    "\n除此之外，除了内置的快捷指令，你还可以根据自身需求自定义指令。": "\n并且除了内置的快捷指令，你还可以根据自身需求自定义指令。",
                    "比如说你的口语水平已经达到了一定的流畅度，只是偶尔有些词汇的表达方式不够地道，那么你可以自定义一个快捷指令：\n": "比如说你的口语水平已经达到了一定的流畅度，只是偶尔有些词汇的表达方式不够地道，那么你可以自定义一个快捷指令：\n",
                    "\n鉴于自定义指令的使用流程与内置指令类似，我们就不再详细演示整个流程了。": "\n鉴于自定义指令的使用流程与内置指令类似，我们就不再详细演示整个流程了。",
                    "假设你正在练习线上会议中的常用表达，这时 AI 问了你一个问题：": "假设你正在练习线上会议中的常用表达，这时 AI 问了你一个问题：",
                    "What do you think about these suggestions?": "What do you think about these suggestions?",
                    "假设你想回复 \"东西有点多，我晚点提炼一下\"，但不知道如何表达，那么就可以通过快捷指令求助另一个 AI\n": "假设你想回复 \"东西有点多，我晚点提炼一下\"，但不知道如何表达，那么就可以通过快捷指令求助另一个 AI\n",
                    "现在点一下这个图标试试": "现在点一下这个图标试试",
                    "tutorialEndingSummary": `有了自定义快捷指令，你便可以根据自身需求，打造一套属于自己的工具链：\n\n- 比如在模拟面试中让 AI 协助回答不会的问题；\n- 或者让 AI 提炼句子中的短语，并提供一些同义词，扩充自己的词汇量；\n- 甚至在未来的更新中，你还将能够通过快捷指令与外部系统进行联动，例如自动将词汇添加到生词本，等等。\n\n以上便是对快捷指令功能的基本介绍，除此之外 LinguaDuck 还包含语音录入、自动播放语音、消息编辑等更多功能，你现在可以新建一个对话自由探索这些功能了！`,
                    'tooltip.diffViewText': '弹窗中即 AI 提供的翻译结果，与普通网页翻译工具不同的是，快捷指令会结合对话上下文，给出更符合当前语境的建议。',
                    'tooltip.diffViewText2': '例如在这个场景下，你不需要担心 AI 会以为你说的是什么化学物质的提炼，而是根据"会议"这个上下文来翻译。',
                    'tooltip.approveButton': '现在，点击 「采纳」 按钮，采纳 AI 提供的结果。',
                    'tooltip.approveRejectButtons': '如果你对快捷指令返回的结果满意，可以点击"采纳"按钮，或按 Enter 键，将结果填入到输入框中。',
                    'tooltip.approveRejectButtons2': '如果不想采纳，则点击"取消"按钮，或按 Backspace 键，取消本次修改。（当前在教程模式中，暂时不可操作）',
                    'tooltip.followUpDiscussion': '如果你对 AI 返回的结果不满意或者有其他疑问，可以进一步追问或讨论。现在点击一下看看效果。',
                    'webSpeech.serviceTip': '该服务使用浏览器内置的本地文本转语音引擎，可用的语言和语音质量可能因浏览器和操作系统而异。',
                    'azureTTS.serviceTip': '该服务需要 Azure 订阅密钥。你需要注册 Azure 账号并创建语音服务资源来获取密钥。Azure TTS 提供多种语言的高质量语音，支持神经网络文本转语音。',
                    'autoPlayAudioDescription': '在 AI 回复消息后自动播放语音',
                    'systemPrompt': '你是一位口语对话练习伙伴，请使用与用户相同的语言回复。保持回答简短自然，尽量控制在50字以内。使用日常对话的语气，避免复杂句子。一次表达一个观点。不要使用格式化文本（如粗体、斜体、序号等）和表情符号，以确保更好的文本转语音效果。',
                    'systemPromptHint': '以上为系统赋予 AI 的人物设定，你可以根据自身需求进行修改。'
                }
            },
            // the Japanese translation is generated using LLM, PRs are welcomed to improve it.
            // 日本語の翻訳はLLMを使用して生成されています。より良い翻訳のPRを歓迎します。
            ja: {
                translation: {
                    'About': 'について',
                    'New Chat': '新しいチャット',
                    'Settings': '設定',
                    'General': '一般',
                    'Chat': 'チャット',
                    'Speech': '音声',
                    'Models': 'モデル',
                    'Model-Single-Form': 'モデル',
                    'Select Your Language': 'インターフェイス言語',
                    'Confirm': '確認',
                    'Untitled Chat': '無題のチャット',
                    'Chat {{number}}': 'チャット {{number}}',
                    'translateInputInto': 'あなたの入力を次の言語に翻訳します',
                    'save': '保存',
                    'instruction': '指示',
                    'tooltip': 'ツールチップ',
                    'tooltipInfo': 'ツールチップは、アイコンにマウスを乗せたときに表示されるテキストです。今見ているもののように。',
                    'icon': 'アイコン',
                    'singleCharacterIcon': 'アイコンには1文字のみを使用してください。',
                    'editInstruction': '指示を編集',
                    'customInstruction': 'カスタム指示',
                    'instructionType': '指示タイプ',
                    'generation': '生成',
                    'modification': '修正',
                    'cancel': 'キャンセル',
                    'add': '追加',
                    'enterOneCharacter': '1文字のみを入力してください',
                    'customIconNote': 'カスタムアイコン機能はまもなく利用可能になります。現在は1文字のみをアイコンとして使用してください。',
                    'generationExplanation': '生成指示は、AIにあなたのために応答を生成するよう指示します。それはあなたの入力が空のときにのみ機能します。\n指示は簡潔で具体的にし、AIにどのような応答が欲しいかを伝えてください。',
                    'modificationExplanation': '修正指示は、AIに現在の入力を修正するよう指示します。それはあなたの入力が空でないときに機能します。\n文法ミスの修正、表現の磨き上げ、または入力を別の言語に翻訳するために使用できます。',
                    'typeMessage': 'ここにメッセージを入力してください...',
                    'sendTips': 'Enterキーで信、Ctrl+Enterでメッセージを追加、Shift+Enterで改行',
                    'recordingTips': 'スペースキーを押して録音開始、離して停止',
                    'system': 'システム',
                    'assistant': 'アシスタント',
                    'user': 'ユーザー',
                    'Auto Send': '自動送信',
                    'Voice Mode': '音声入力',
                    'Rename': '名前を変更',
                    'Delete': '削除',
                    'Free Trial': 'クイック体験',
                    'Models Service': 'モデルサービス',
                    'baseURL': 'ベースURL',
                    'Chat Model': 'チャットモデルサービス',
                    'Add Service': 'サービスを追加',
                    'Speech Synthesis Service': '音声合成サービス',
                    'translateTooltip': '入力を{{targetLanguage}}に翻訳',
                    'generateResponseTooltip': '応答の生成を支援',
                    'grammarCheckTooltip': '文法の問題を修正',
                    'The recommended response is as follows': '根拠に基づく推奨応答は次のとおりです',
                    'If you have any more questions or requests, feel free to reach out to me': 'もし、さらなる質問や要望があれば、お気軽にお問い合わせください。',
                    'chat.backToPreviousLevel': '前の会話に戻る',
                    'addCustomInstruction': 'カスタム指示を追加',
                    'Auto Play Audio': '音声自動再生',
                    'Shortcut Instructions': 'ショートカット指示',
                    'cannotDeleteBuiltInInstruction': '組み込み指示は削除できません',
                    'deleteInstruction': '指示を削除',
                    'toggleInstructionDisplay': '指示の表示を切り替える',
                    'Select Practice Language': '練習したい言語',
                    'lang.en': '英語',
                    'lang.zh': '中国語',
                    'lang.ja': '日本語',
                    'practiceLanguageHint': 'れはショートカット設定用です。後で変更できます',
                    'betaWarning': 'このアプリケーションは現在ベータテスト中です。重要なデータを保存しないでください。',
                    'Approve': '承認',
                    'Reject': '拒否',
                    'Follow-up discussions': 'フォローアップ討論',
                    'Show Diff': '差分表示',
                    'Edit': '編集',
                    'Save': '保存',
                    'Please turn off diff view to edit': '編集するには差分表示をオフにしてください',
                    'voiceModeTips': `バックスペースキーを押して現在の入力をクリアし、I キーを押して音声入力モードを終了します`,
                    'autoSendTips': '有効にすると、音声録音終了後にメッセージが自動的に送信されます',
                    'recordingButtonTips': 'クリックして録音を開始し、もう一度クリックして停止します',
                    'Welcome to LinguaDuck': 'LinguaDuck へようこそ',
                    'Please set up your preferences to get started': '設定を完了して始めましょう',
                    'Custom Service': 'カスタムサービス',
                    'Speech Language': '音声言語',
                    'Speech Voice': '音声の声',
                    'Test Speech': '音声テスト',
                    'Default': 'デフォルト',
                    'Enter text to test speech': 'テスト用のテキストを入力',
                    'What is the answer to life, the universe and everything?': 'What is the answer to life, the universe and everything?',
                    'speechVoiceTestTip': '音声の品質はブラウザやデバイスによって異なる場合があります。最適な音声を見つけるため、様々な声や文章をお試しください。',
                    'Azure Region': 'Azure リージョン',
                    'Subscription Key': 'サブスクリプションキー',
                    'Language': '言語',
                    'Voice': '声',
                    'Enter your Azure subscription key': 'Azure サブスクリプションキーを入力してください',
                    'freeTrial.ttsServiceTip': 'この音声合成サービスは、新規ユーザーの体験用で、速度と利用制限があります。より良い体験のために、他の音声合成サービスの使用をお勧めします。',
                    'speechSvc.webSpeech': 'ブラウザ内蔵 TTS',
                    'speechSvc.azure': 'Azure TTS',
                    'speechSvc.freeTrial': 'クイック体験',
                    'Quack!': 'ガー！',
                    'freeTrialHintMessage': '現在のチャットモデルサービスは、速度と用頻度の制限があ���クイック体験用で。設定ページ「チャット -> チャットモデルサービス」から他のモデルサービスに切り替えてください。',
                    'welcomeMessage': 'BabelDuckは、全ての習熟度レベルの言語学習者のためのAI会話練習アプリケーションです',
                    'Please enter the complete URL including the path': 'パスを含む完全なURLを入力してください',
                    'freeTrialChatIntelligenceIntroduction': '新規ユーザー向けのクイック体験用サービスで、速度と利用頻度に制限があり、モデルの指定はできません。必要な場合は、他のモデルサービスに切り替えてください。',
                    'babelDuckChatIntelligenceIntroduction': '先進的な鳥類神経生体模倣アーキテクチャに基づき、この革新的な水鳥知能システムは独自のアヒル認知パターンを採用し、高度な多言語処理能力とミリ秒レベルの応答速度を実現します。',
                    'Blur Text': 'テキストをぼかす',
                    'useGlobalSettings': 'グローバル設定を使用',
                    'globalSettingsDescription.enabled': '現在のチャット設定はグローバル設定と同期されます。ここでの変更は、グローバル設定を使用する全てのチャットに影響します。',
                    'globalSettingsDescription.disabled': 'グローバル設定は無効になっています。ここでの変更は現在のチャットにのみ影響します。',
                    'logoAttribution': 'Duck アイコンは Freepik - Flaticon によってデザインされました',
                    'viewOnGitHub': 'GitHub で見る',
                    'interfaceLanguageHint': '母国語と一致させることをお勧めします',
                    'Next Step': '次のステップ',
                    'Tutorial': 'チュートリアル',
                    'Tutorial Model': 'チュートリアルモデル',
                    'Press Enter to send your message': 'Enter キーを押してメッセージを送信（Enter キーが反応しない場合は、テキストボックスをクリックしてから再度 Enter キーを押してください）',
                    'Free input is temporarily not supported in this tutorial': 'チュートリアルモードでは自由入力は一時的に無効になっています',
                    'Expand': '展開',
                    'Collapse': '折りたたむ',
                    'voiceModeNotSupportedInTutorial': 'チュートリアルモードでは音声モードは一時的に無効になっています',
                    'recordingNotSupportedInTutorial': 'チュートリアルモードでは録音は一時的に無効になっています',
                    'trialChatUnavailable': '体験版チャットサービスは一時的に利用できません。トラフィックが多い可能性があります。後でもう一度お試しいただくか、設定で他のチャットモデルサービスに切り替えてください',
                    'chatUnavailable': 'チャットモデルサービスは一時的に利用できません。後でもう一度お試しください',
                    'modelSettingsInvalid': 'モデル設定が無効です：{{message}}',
                    'trialTTSUnavailable': '体験版音声サービスは一時的に利用できません。後でもう一度お試しいただくか、設定で他の音声合成サービスに切り替えてください',
                    'IELTS Speaking Practice': 'IELTS スピーキング練習',
                    'Mock Interview': '模擬面接',
                    'fillPositionAndResumeHint': '開始する前に、応募職位と履歴書の情報を変更してください。',
                    'transcriptionImprovementTooltip': '音声認識結果の改善をAIに依頼',
                    // tutorials
                    '东西有点多，我晚点提炼一下': '情報が多いので、後でまとめ直します',
                    '这里可以用 extract 吗?': 'ここで extract を使えますか？',
                    'extract 虽然也有"提取"的意思，但在这个会议场景下不是最佳选择。让我解释一下原因：\n……（略）': 'extract には「抽出する」という意味もありますが、この会議の場面では最適な選択ではありません。理由を説明させていただきます：\n……（省略）',
                    '就像上面这样，并且在子对话中的讨论不会影响上一层对话。\n\n现在我们要结束子对话，点击下左侧的 ">" 按钮，即可返回上一层对话。': 'このように、サブ会話での議論は上位の会話に影響を与えません。\n\nサブ会話を終了するには、左下の ">" ボタンをクリックして上位の会話に戻ります。',
                    "LinguaDuck 是一款面向各水平层次语言学习者的 AI 口语对话练习应用。除了普通的 AI 对话聊天能力外，我们还提供了一系列为口语练习场景而设计的工具，本教程将为你简单介绍如何使用它们。若你更倾向于自行摸索，可以点击左下角「新建对话」，即可开始体验，之后你依然随时可以回来继续该教程。": "LinguaDuck は、あらゆるレベルの言語学習者向けのAI会話練習アプリケーションです。通常のAIチャット機能に加えて、会話練習のために設計された一連のツールを提供しています。このチュートリアルでは、それらの使い方を簡単に紹介します。自分で探索したい場合は、左下の「新しいチャット」をクリックして体験を始めることができます。その後でもいつでもこのチュートリアルに戻ることができます。",
                    "LinguaDuck 提供了一系列快捷指令，协助用户在口语表达上遇到困难时更流畅地推进对话。\n比如有些人练习初期很容易遇到\"卡壳\"的情况，完全不知道某句话该如何表达时，不得不切出去寻求其他工具的帮助。为此系统内置了一个快捷指令，作为初期过渡工具用，允许你先用母语表达一遍，然后帮你转换为对应语言。\n\n接下来我们简单演示下使用方法": "LinguaDuck は、ユーザーが会話で表現に困ったときにスムーズに会話を進められるよう、一連のショートカットコマンドを提供しています。\n例えば、練習初期には「言葉に詰まる」ことがよくあり、特定のフレーズをどう表現すればよいか分からず、他のツールを使わざるを得ない場合があります。そのため、システムには初期の移行ツールとして、まず母語で表現し、それを目標言語に変換できるショートカットコマンドが組み込まれています。\n\n使い方を簡単に紹介しましょう",
                    "在子对话中，你可以在当前对话的基础上，向 AI 追问更多问题。": "サブ会話では、現在の会話を基に、AIにさらに質問を追加できます。",
                    "以上便是 LinguaDuck 中其中一个快捷指令的基本使用流程，除此之外，我们还提供了其他一系列快捷指令。": "以上が LinguaDuck のショートカットコマンドの基本的な使用手順です。この他にも、様々なショートカットコマンドを提供しています。",
                    "比如常见的语法纠正需求，也有对应的内置指令，效果如下：\n": "例えば、一般的な文法修正のニーズにも対応する組み込みコマンドがあります。効果は以下の通りです：\n",
                    "\n除此之外，除了内置的快捷指令，你还可以根据自身需求自定义指令。": "\nさらに、組み込みのショートカットコマンドに加えて、自分のニーズに合わせてカスタムコマンドを作成することもできます。",
                    "比如说你的口语水平已经达到了一定的流畅度，只是偶尔有些词汇的表达方式不够地道，那么你可以自定义一个快捷指令：\n": "例えば、会話力がある程度流暢になっていて、時々表現が自然でない場合、次のようなカスタムコマンドを作成できます：\n",
                    "\n鉴于自定义指令的使用流程与内置指令类似，我们就不再详细演示整个流程了。": "\nカスタムコマンドの使用手順は組み込みコマンドと似ているため、詳細な手順は省略させていただきます。",
                    "假设你正在练习线上会议中的常用表达，这时 AI 问了你一个问题：": "オンライン会議での一般的な表現を練習していると仮定して、AIが次のような質問をしました：",
                    "What do you think about these suggestions?": "What do you think about these suggestions?",
                    "假设你想回复 \"东西有点多，我晚点提炼一下\"，但不知道如何表达，那么就可以通过快捷指令求助另一个 AI\n": "「情報が多いので、後でまとめ直します」と返信したいけれど、どう表現すればいいか分からない場合、ショートカットコマンドを使って別のAIに助けを求めることができます\n",
                    "现在点一下这个图标试试": "このアイコンをクリックしてみましょう",
                    "tutorialEndingSummary": `カスタムショートカットコマンドを使用することで、自分のニーズに合わせたツールチェーンを構築できます：\n\n- 例えば、模擬面接で答えられない質問にAIが支援してくれるため、他のウィンドウに切り替えて情報を探す必要がありません；\n- または、AIに文章からフレーズを抽出し、類義語を提供してもらうことで、語彙力を向上させることができます；\n- 将来のアップデートでは、ショートカットコマンドを通じて外部システムと連携することも可能になり、例えば単語を単語帳に自動追加するなどの機能が追加される予定です。\n\nこれでショートカットコマンド機能の基本的な紹介は終了です。チュートリアルを簡潔にするため、音声入力、メッセージ編集、チャット設定などの機能の紹介は省略しました。これらの機能は、新しい通常のチャットを作成して体験することができます。\n\nチュートリアルは以上です。お役に立てば幸いです。フィードバックをお待ちしています！`,
                    'tooltip.diffViewText': 'ポップアップに表示されるのはAIの翻訳結果です。一般的なウェブ翻訳ツールとは異なり、ショートカットコマンドは会話の文脈を考慮して、より状況に適した提案を提供します。',
                    'tooltip.diffViewText2': '例えば、この場面では、AIが化学物質の抽出について話していると誤解することはなく、「会議」という文脈に基づいて翻訳を行います。',
                    'tooltip.approveButton': '「承認」ボタンをクリックして、AIの提案を採用しましょう。',
                    'tooltip.approveRejectButtons': 'ショートカットコマンドの結果に満足した場合は、「承認」ボタンをクリックするか、Enterキーを押して、結果を入力ボックスに反映させることができます。',
                    'tooltip.approveRejectButtons2': '採用したくない場合は、「キャンセル」ボタンをクリックするか、Backspaceキーを押して、この変更をキャンセルします。（現在はチュートリアルモードのため、操作できません）',
                    'tooltip.followUpDiscussion': 'AIの返答に満足できない場合や他に質問がある場合は、さらに質問や議論を続けることができます。クリックして効果を確認してみましょう。',
                    'webSpeech.serviceTip': 'このサービスは、ブラウザに内蔵されているローカルの音声合成エンジンを使用します。利用可能な言語と音声品質は、ブラウザやオペレーティングシステムによって異なる場合があります。',
                    'azureTTS.serviceTip': 'このサービスには Azure サブスクリプションキー必要で���。Azure アカウントを登録し、Speech Service リソースを作成してキーを取得する必要があります。Azure TTS は多言語の高品質な音声を提供し、ニューラル音声合成をサポートしています。',
                    'autoPlayAudioDescription': 'AIが応答した後、自動的に音声を再生します',
                    'systemPrompt': 'フレンドリーな会話パートナーです。ユーザーと同じ言語で応答します。回答は短く自然に保ち、50語以内を目指します。カジュアルな会話調を使用し、形式的な言葉や複雑な文を避けます。一度に一つのポイントを表現します。テキスト読み上げの効果を高めるため、フォーマット済みテキスト（太字、斜体など）や絵文字は使用しません。',
                    'systemPromptHint': 'これはシステムによってAIに与えられたキャラクター設定です。必要に応じて修正することができます。'
                }
            }
        }
    });

export default i18n;
